//////////////////////////////////////////////////////////////////////////////
//       Copyright (c) 2003 - RealTime Gaming.  All rights reserved.        //
//////////////////////////////////////////////////////////////////////////////

#include <string.h>

#include "lib.h"
#include "enotify.h"
#include "opts.h"
#include "odbc.h"
#include "smtp.h"
#include "tracksql.h"

//////////////////////////////////////////////////////////////////////////////
// constructor
//////////////////////////////////////////////////////////////////////////////
EmailNotification::EmailNotification( Library::KeywordSubstitutor* pSubstitutor, TrackSQL* sql  )
    :Email( pSubstitutor, sql )
{
}

//////////////////////////////////////////////////////////////////////////////
// send
//////////////////////////////////////////////////////////////////////////////
bool8
EmailNotification::send(const String& msg, SMTP::Header& hdr)
{
	bool8 result = false;

	result = SMTP::send(ServerOpts::smtphost, hdr, msg);

	return result;
}

//////////////////////////////////////////////////////////////////////////////
// sendEndOfSessionEmailMsg
//////////////////////////////////////////////////////////////////////////////
bool8
EmailNotification::sendEndOfSessionEmailMsg(SESSIONID sessionID)
{
	bool8 result = false;
	if (sql)
	{
		SMTP::Header hdr;
		String src;
		int32 srclen;

        hdr.nameFrom.empty();
        hdr.emailFrom.empty();
        hdr.emailTo.empty();
        hdr.subject.empty();

		src = sql->getEndOfSessionEmailMsg(ENDOFSESSION, sessionID, &srclen,
			hdr.nameFrom, hdr.emailFrom, hdr.emailTo, hdr.subject);

		if (!src.isEmpty() && verifyEmailAddress(hdr.emailTo))
		{
            // Perform keyword substitution
            if ( m_pSubstitutor )
            {
                String sCacheID;
                sCacheID.sprintf( "%d", ENDOFSESSION );
                src = m_pSubstitutor->PerformSubstitution( sCacheID, src );
            }

			result = send(src, hdr);
		}
	}
	
    return result;
}

//////////////////////////////////////////////////////////////////////////////
// sendInvalidPayoutMsg
//////////////////////////////////////////////////////////////////////////////
bool8
EmailNotification::sendInvalidPayoutMsg( const String& msg )
{
	bool8 result = false;

	SMTP::Header hdr;

	if (!sql->getSystemEmailRouting(NULL, INVALIDPAYOUT, hdr.nameFrom, hdr.emailFrom, hdr.emailTo, hdr.subject))
	{
		// Make sure we notify somebody of an invalid payout
#ifdef DEBUG
		hdr.emailFrom = TEXT("casino-developers@riptownmedia.com");
		hdr.emailTo = TEXT("casino-developers@riptownmedia.com");
#else
        hdr.emailFrom = TEXT("casino-developers@riptownmedia.com");
        hdr.emailTo = TEXT("casino-developers@riptownmedia.com");
#endif
        hdr.nameFrom = TEXT("Invalid Payout Notification");
        hdr.subject = TEXT("URGENT - Invalid Payout Notification");
	}

	if ( !msg.isEmpty() && verifyEmailAddress(hdr.emailTo) )
    {
        String sNewMsg;

        // Perform keyword substitution
        if ( m_pSubstitutor )
        {
            String sCacheID;
            sCacheID.sprintf( "%d", INVALIDPAYOUT );
            sNewMsg = m_pSubstitutor->PerformSubstitution( sCacheID, msg );
        }
        else
        {
            sNewMsg = msg;
        }

		result = send( sNewMsg, hdr );
    }

	return result;
}

//////////////////////////////////////////////////////////////////////////////
// verifyEmailAddress
//////////////////////////////////////////////////////////////////////////////
bool8 
EmailNotification::verifyEmailAddress(const String& sEmailAddy)
{
    return ( sEmailAddy.find( "@" ) != String::NPOS );
}
